iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
自我挑戰組

解三十天的 CodeWars系列 第 19

Product of consecutive Fib numbers

  • 分享至 

  • xImage
  •  

CodeWars 題目

Link

難度

5 kyu

題目

斐波那契數:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...
也就是該項為前兩項相加,0 + 1 ⇒ 1、1 + 1 ⇒ 2 依此類推。
函數傳入參數 prod,回傳前兩項相乘後 = prod,或者 n * n+1 > prod 的最小結果。

思路

斐波那契數勢必要從頭開始計算到接近 prod。

變數儲存 n 與 n1,while 迴圈跑小於 prod,累積相乘後取得結果。

pseudo code

isProd = false 紀錄是否 === prod,先預設為否
n = 0
n1 = 1

while n * n1 < prod
n 與 n1 做斐波那契數++處理

if(n*n1 === prod)
isProd = true

return [n, n1, isProd]

實作

function productFib(prod) {
	let isProd = false;
	let n = 0;
	let n1 = 1;

	while (n * n1 < prod) {
		let temp = n1;
		n1 = n + n1;
		n = temp;
	}

	if (n * n1 == prod) {
		isProd = true;
	}
	return [n, n1, isProd];
}

用變數儲存要輸出的資料。
while 迴圈在 n * n1 > prod 之前,會持續做斐波那契數處理。

參照斐波那契數列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, ...
假設 n = 5, n1 = 8,下一輪的 n 與 n1 應該是 8 與 13。

把 n1 先暫存到 temp;也就是 temp = 8。
n1 先做處理,5 +8 ⇒ 13;最後把暫存的 temp 給 n = temp = 8。

最後用陣列形式返回變數。

心得

颱風開始影響台灣,希望沒有任何災情~


上一篇
Strip Comments
下一篇
Convert PascalCase string into snake_case
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言